.TH std::experimental::ranges::Relation 3 "2024.06.10" "http://cppreference.com" "C++ Standard Libary"
.SH NAME
std::experimental::ranges::Relation \- std::experimental::ranges::Relation

.SH Synopsis
   Defined in header <experimental/ranges/concepts>
   template< class R, class T, class U >

   concept bool Relation =
       Predicate<R, T, T> &&
       Predicate<R, U, U> &&
       CommonReference<
           const std::remove_reference_t<T>&,
           const std::remove_reference_t<U>&> &&
       Predicate<R,                                   \fB(1)\fP (ranges TS)
           ranges::common_reference_t<
               const std::remove_reference_t<T>&,
               const std::remove_reference_t<U>&>,
           ranges::common_reference_t<
               const std::remove_reference_t<T>&,
               const std::remove_reference_t<U>&>> &&
       Predicate<R, T, U> &&

       Predicate<R, U, T>;

   The concept Relation<R, T, U> specifies that R defines a binary relation over the
   set of expressions whose type and value category are those encoded by either T or U.

   Given

     * r, an expression such that decltype((r)) is R,
     * t, an expression such that decltype((t)) is T,
     * u, an expression such that decltype((u)) is U,

   and let C be ranges::common_reference_t<const std::remove_reference_t<T>&, const
   std::remove_reference_t<U>&>,

   then Relation<R, T, U> is satisfied only if

     * bool(r(t, u)) == bool(r(C(t), C(u))) and
     * bool(r(u, t)) == bool(r(C(u), C(t))).
